//来自于力扣85题，难度：困难
function test(arr){
    let result = []
    // ------------------重新定义一种方式去描述和表示----------------
    let reg = /1{2,}/g
    arr = arr.map(item => {
      let str = item.join('')
      let r = reg.exec(str)
      let rs = []
      while (r) {
        rs.push([r.index, r.index + r[0].length - 1])
        r = reg.exec(str)
      }
      return rs
    })
    // 通过递归计算相邻的矩阵
     // ------------------递归计算相邻矩阵---------------
     /**
      * 
      * @param {*} arr 栈
      * @param {*} result 上一次结果
      * @param {*} n 递归次数，处理了多少行
      */
    let maxRect = (arr, result, n = 1) => {
      // 弹出第一行
      let top = arr.pop()
      // 弹出第二行
      let next = arr.pop()
      // 记录第-行的每一个起始点和截止点
      let tt
      // 记录第-行的每一个起始点和截止点
      let nn
      let start
      let end
      let width = 1
      let maxWidth = 1
      n++
      for (let i = 0, il = top.length; i < il; i++) {
        tt = top[i]
        for (let j = 0, jl = next.length; j < jl; j++) {
          nn = next[j]
          width = Math.min(tt[1], nn[1]) - Math.max(tt[0], nn[0])
          if (width >= maxWidth) {
            maxWidth = width
            start = Math.max(tt[0], nn[0])
            end = Math.min(tt[1], nn[1])
          }
        }
      }
      if (start === undefined || end === undefined) {
        if (n < 3) {
          return false
        } else {
          width = top[0][1] - top[0][0] + 1
          if (width > 1) {
            result.push((n - 1) * width)
          }
        }
      } else {
        if (arr.length > 0) {
          arr.push([
            [start, end]
          ])
          maxRect(arr, result, n++)
        } else {
          result.push(n * (end - start + 1))
        }
      }
    }
    while (arr.length > 1) {
      maxRect([].concat(arr), result)
      console.log(arr)
      arr.pop()
    }
    let max = 0
    let item = result.pop()
    while (item) {
      if (item > max) {
        max = item
      }
      item = result.pop()
    }
    return max > 0 ? max : -1
  }
  test([
    [1,0,1,0,0],
    [1,0,1,1,1],
    [1,1,1,1,1],
    [1,0,0,1,0],
  ])
  // test([[1,1,1,3],[4,1,1,1]])